package com.epfly.iface.promo.activity.vo;

import com.epfly.base.hv.AddGroup;
import com.epfly.base.hv.UpdateGroup;
import com.epfly.base.vo.BaseReq;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ActivityAddAndUpdateRequest extends BaseReq {

    /**
     * 活动ID(用于修改)
     */
    @NotNull(message = "活动ID不能为空", groups = {UpdateGroup.class})
    private Long activityId;

    /**
     * 所属商户
     */
    @NotEmpty(message = "商户不能为空")
    @Length(message = "商户ID不能超过40个字符")
    private String merchantId;

    /**
     * 活动名称
     */
    @NotEmpty(message = "活动名称不能为空")
    @Length(message = "活动名称长度不能超过50个字符")
    private String activityName;


    /**
     * 活动类型:1.订单优惠;2.菜品优惠
     */
    @NotNull(message = "活动类型不能为空")
    private Byte activityType;

    /**
     * 优惠方式:1.满减;2.折扣;5.菜品分类折扣;6.菜品折扣;7.特价菜;
     * {@link com.epfly.iface.promo.activity.enums.DiscountTypeEnum}
     */
    @NotNull(message = "优惠方式不能为空")
    private Byte discountType;

    /**
     * 优惠方式==菜品分类折扣，需要传菜品分类ID
     * 优惠方式==菜品折扣，需要传菜品ID
     * 优惠方式==特价菜，需要传菜品ID、特价金额
     */
    private List<ActivityRelationVo> relationList;


    /**
     * 活动开始时间
     */
    @NotNull(message = "活动开始时间不能为空")
    private Long activityStartTime;

    /**
     * 活动结束时间
     */
    @NotNull(message = "活动结束时间不能为空")
    private Long activityEndTime;

    /**
     * 活动对象类型:0.不限;1.散户;2.会员;3.员工
     */
    @NotEmpty(message = "活动对象类型不能为空")
    private List<Byte> activityObjectTypeList;

    /**
     * 部门/职务:0.不限;2.指定部门;3:指定职务;
     */
    private Byte activityObjectTypeCascade;

    /**
     * 部门ID列表或职务ID列表
     */
    private List<String> objectIdList;

    /**
     * 活动档口:0.不限;1.指定档口
     */
    @NotNull(message = "活动档口不能为空")
    private Byte storeStyle;

    /**
     * 档口ID列表
     */
    private List<String> storeIdList;

    /**
     * 适用星期：0.不限;1.周一;2.周二;3.周三;4.周四;5.周五;6.周六;7.周日
     */
    @NotEmpty(message = "适用星期不能为空")
    private List<Byte> effectiveDays;

    /**
     * 活动节假日:0.不限;1.节假日不可用
     */
    @NotNull(message = "适用节假日不能为空")
    private Byte isSuiteHoliday;


    /**
     * 下单方式:0.不限;1.绑盘;2.后支付;3.点餐;4.视觉识别;5.预定;
     */
    @NotEmpty(message = "下单方式不能为空")
    private List<Byte> effectiveOrderMethods;

    /**
     * 取餐方式:0.不限;1.堂食;2.配送;3.自提
     */
    @NotEmpty(message = "取餐方式不能为空")
    private List<Byte> effectiveTakeMethods;

    /**
     * 备注
     */
    @Length(max = 200, message = "备注不能超过200个字符")
    private String remark;

    /**
     * 活动规则
     */
    @NotEmpty(message = "活动规则不能为空")
    private List<ActivityRuleVo> ruleList;

    /**
     * 餐别活动限额限次
     */
    private List<ActivityDinnerBoundVo> dinnerBoundList;

    /**
     * 日活动限额限次
     */
    private ActivityDayBoundVo dayBound;

    /**
     * 创建人
     */
    @NotEmpty(message = "创建人不能为空", groups = {AddGroup.class})
    @Length(max = 40, message = "创建人长度不能超过40个字符", groups = {AddGroup.class})
    private String createBy;

    /**
     * 修改人(用于修改)
     */
    @NotEmpty(message = "修改人不能为空", groups = {UpdateGroup.class})
    @Length(max = 40, message = "修改人长度不能超过40个字符", groups = {UpdateGroup.class})
    private String updateBy;

}
